# -*- coding: utf-8 -*-
"""
Created on Sun Nov 14 15:42:37 2021

@author: 刘长奇
"""

import numpy as np
num,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22,q23,q24,q25,q26,q27,q28,q29,q30,q31,q32,q33,q34,q35,q36,y= np.loadtxt("train.csv",delimiter=',', usecols=(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37), 
	unpack=True)
num = num.reshape(-1,1)
y = y.reshape(-1,1)
for i in range(1,37):
    exec ("q%s=q%s.reshape(-1,1)"%(i,i))
train = np.hstack((q1.reshape(-1,1),q2.reshape(-1,1)))
for i in range(3,37):
    exec ("train=np.hstack((train,q%s.reshape(-1,1)))"%i)
#产生训练集

#提取主要信息，进行降维处理
from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)#降维到5维
proj = pca.fit_transform(train)

#利用降维后的数据进行分类
from sklearn.neural_network import MLPClassifier
clf_class= MLPClassifier(solver='adam', alpha=1e-5,hidden_layer_sizes=(40,20), random_state=1,max_iter=2000)
clf_class.fit(proj,y)
#sklearn神经网络学习，隐藏层两层，第一层40个节点，第二层20个节点，最多迭代2000次

y_pred=[]
j=0
for i in range(np.shape(train)[0]):
    y_pred.append(clf_class.predict([proj[i]]))
for i in range(np.shape(train)[0]):
    if y_pred[i]==y[i]:
        j=j+1
    if (i+1)%200==0:
        print(j/200000)
#未经过pca降维处理的训练集准确率：0.925
#经过pca降维处理后的训练集准确率：0.913
#相同层数的隐藏层，准确率下降，计算时间延长






